面试写代码(尤其是前端 Live Coding)遇到考察可访问性(Accessibility,简称 A11y)时,面试官往往不是指望你背下所有的 ARIA 属性,而是看你有没有这个意识以及能不能在关键组件上正确运用

要做到“速成”并给面试官留下惊艳的印象,核心秘密只有一句话:能用原生 HTML 标签,就绝对不要用 ARIA。只有在原生标签无能为力时,才用 ARIA 来补救。

以下是为你整理的 ARIA 面试速成自救指南,吃透这三招,应付面试妥妥的。

🛑 核心心法:ARIA 第一准则(First Rule of ARIA)

面试写代码时,最忌讳为了展现自己知道 ARIA,而在 button 上写 role="button"

速成口诀多用语义化标签(main, nav, header, footer, aside, dialog),少用 divspan

⚡ 三大高频面试场景速成模板

如果面试官非要让你实现一个原生标签做不了的复杂组件(比如自定义下拉框、弹窗、选项卡),你只需要死记硬背下面三个场景的 ARIA 属性:

场景一:纯图标按钮(没有文字的 Button)

面试写代码时,我们经常用 Lucide React 或 FontAwesome 的图标来当按钮(比如关闭按钮 X,或者搜索图标)。屏幕阅读器是读不懂图标的!

场景二:控制显示/隐藏的组件(如:下拉菜单 Dropdown / 折叠面板 Accordion)

面试官非常喜欢让你写一个点击能展开、收起的组件。你需要用 ARIA 告诉盲人:“我现在是展开的还是收起的?” 以及 “我控制的是哪一块区域?”

场景三:异步加载 / 错误提示(动态更新的区域)

比如你刚才写的 GitHub 搜索组件,当网络请求正在加载(Loading),或者突然报错时,如何让盲人第一时间知道?因为盲人看不到屏幕上突然弹出的错误红字。

🧠 面试时的“装杯”加分连招(口述话术)

在 Remote 面试写代码时,一边敲代码,一边把你的 A11y 意识说出来,能瞬间把面试官的期待值拉满。你可以直接背诵以下这段话:

“这里我使用了原生的 <button> 标签,而不是用 <div>onClick。因为原生标签不仅自带 button 的可访问性角色(Role),而且天然支持键盘的 Tab 键聚焦,以及回车键(Enter/Space)触发。这样我们就不用再手动去写 tabIndex={0} 和键盘事件监听了,体验和性能都更好。”

如果迫不得已用了 aria-label,你可以说:

“因为这个按钮里面只有 Icon 图标,没有文本,为了对屏幕阅读器(Screen Reader)和盲人用户友好,我特意加了 aria-label 来描述这个按钮的实际功能。”

🏁 总结你的速成清单:

  1. 能用 button 不用 div
  2. 图标按钮必须加 aria-label="描述"
  3. 控制显示隐藏加 aria-expanded={boolean}
  4. 动态提示(如 Loading、报错)加 aria-live="polite"

记住这四点,面试时的可访问性考核基本就能轻松高分通过了!